package cqrtplm.controller;

import com.hustcad.plm.pdm.common.model.dto.search.SearchConditionDTO;
import com.hustcad.plm.pdm.enumeration.model.vo.EnumerationItemHandleVO;
import com.hustcad.plm.pdm.file.handler.response.ResponseResult;
import cqrtplm.constant.RouteConstant;
import cqrtplm.dto.RtCfgBOMAndStatusInfoDTO;
import cqrtplm.dto.RtCfgStatusDTO;
import cqrtplm.entity.ZdDbWithFormoid;
import cqrtplm.service.RtCfgStatusInfoService;
import cqrtplm.vo.RtCfgInfoDTO;
import cqrtplm.vo.RtCfgStatusInfoVO;
import cqrtplm.vo.StatusInfoDescriptionVO;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.text.ParseException;
import java.util.List;

@RestController
@Api(tags = "需求管理-状态需求表页面")
@RequestMapping(RouteConstant.RTCFGSTATUSINFO + "v1")
public class RtCfgStatusInfoController {
    @Resource
    private RtCfgStatusInfoService rtCfgStatusInfoService;

    /**
     * 通过机型加开发令加参考类型 获取模板id
     * @param dto
     * @return
     * @throws ParseException
     */
    @PostMapping("/getModuleIdByModelAndDevelopmentOrder")
    public ResponseResult getModuleIdByModelAndDevelopmentOrder(@RequestBody RtCfgStatusDTO dto) throws ParseException {
        return rtCfgStatusInfoService.getModuleIdByModelAndDevelopmentOrder(dto);
    }


    /**
     * 通过模板id加机型  或者 需求状态编码获取所有信息
     * @param dto
     * @return
     * @throws ParseException
     */
    @PostMapping("/getRtCfgStatusInfoByModuleIdOrStatusCode")
    public ResponseResult getRtCfgStatusInfoByModuleIdOrStatusCode(@RequestBody RtCfgStatusDTO dto) throws ParseException {
        return rtCfgStatusInfoService.getRtCfgStatusInfoByModuleIdOrStatusCode(dto);
    }

    /**
     * 根据开发令获取产品类别
     * @param devCode
     * @return
     */
    @GetMapping("/getProductTypeByDevCode")
    public ResponseResult getProductTypeByDevCode(@RequestParam String devCode){
        return rtCfgStatusInfoService.getProductTypeByDevCode(devCode);
    }

    /**
     * 获取终端变化点模板
     * @param dto
     * @return
     * @throws ParseException
     */
    @PostMapping("/getRtCfgStatusInfoByProductCode")
    public ResponseResult getRtCfgStatusInfoByProductCode(@RequestBody RtCfgStatusDTO dto) throws ParseException {
        return rtCfgStatusInfoService.getRtCfgStatusInfoByProductCode(dto);
    }


    /**
     * 保存需求状态表的信息
     * @param rtCfgStatusInfoVO
     * @return
     * @throws ParseException
     */
    @PostMapping("/saveRtCfgStatusInfo")
    public ResponseResult saveRtCfgStatusInfo(@RequestBody RtCfgStatusInfoVO rtCfgStatusInfoVO) throws ParseException {
        return rtCfgStatusInfoService.saveRtCfgStatusInfo(rtCfgStatusInfoVO);
    }



    /**
     * 获取需求状态内容
     * @param rtCfgStatusInfoVO
     * @return
     * @throws ParseException
     */
    @PostMapping("/getRtCfgStatusInfoDetail")
    public ResponseResult getRtCfgStatusInfoDetail(@RequestBody RtCfgStatusInfoVO rtCfgStatusInfoVO) throws ParseException {
        return rtCfgStatusInfoService.getRtCfgStatusInfoDetail(rtCfgStatusInfoVO);
    }


    // 在 RtCfgStatusInfoController.java 中修改方法
    /**
     * 根据分类id获取该分类下的零部件（分页）
     * @param conditionDTO 查询条件
     * @return 分页结果
     */
    @PostMapping("/getPartsByClassOid")
    public ResponseResult getPartsByClassOid(
            @RequestBody SearchConditionDTO conditionDTO,
            String devCode) {
        return rtCfgStatusInfoService.getPartsByClassOid(conditionDTO,devCode);
    }



    /**
     * 获取产品型号
     * @return
     */
    @GetMapping("/getProductType")
    public ResponseResult getProductType() {
        return rtCfgStatusInfoService.getProductType();
    }


    /**
     * 选择参考成品码
     * @param dto
     * @param pageNumber
     * @param pageSize
     * @return
     */
    @PostMapping("/getProductCodeList")
    public ResponseResult getProductCodeList(
            @RequestBody List<StatusInfoDescriptionVO> dto,
            @RequestParam(required = false, defaultValue = "1") Integer pageNumber,
            @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
        return rtCfgStatusInfoService.getProductCodeList(dto, pageNumber, pageSize);
    }



    /**
     * 获取参考类型为默认模板
     * @return
     */
    @PostMapping("/getDefaultTemplate")
    public ResponseResult getDefaultTemplate() {
        return rtCfgStatusInfoService.getDefaultTemplate();
    }


    /**
     * 删除需求状态表编码
     * @param infoIds
     * @return
     */
    @PostMapping("/deleteRtCfgStatusInfo")
    public ResponseResult deleteRtCfgStatusInfo(@RequestBody String[] infoIds){
        return rtCfgStatusInfoService.deleteRtCfgStatusInfo(infoIds);
    }

    //获取产品型谱下所有的实例化对象
//    @PostMapping("/getInstantiatedObject")
//    public ResponseResult getInstantiatedObject() {
//        return rtCfgStatusInfoService.getInstantiatedObject();
//    }

    /**
     * 获取需求状态表唯一编码
     * @return
     */
    @GetMapping("/getRtCfgStatusInfoCode")
    public ResponseResult getRtCfgStatusInfoCode(@RequestParam String code) {
        return rtCfgStatusInfoService.getRtCfgStatusInfoCode(code);
    }

    /**
     * 根据BOM变更反刷属性拼接的值
     */
    @PostMapping("/customization")
    public ResponseResult customization(@RequestBody RtCfgBOMAndStatusInfoDTO rtCfgBOMAndStatusInfoDTO) {
        return rtCfgStatusInfoService.customization(rtCfgBOMAndStatusInfoDTO);
    }


    /**
     * 获取参考引用源内容
     * @param info
     * @return
     */
    @PostMapping("/getReferenceSourceContent")
    public ResponseResult getReferenceSourceContent(@RequestBody RtCfgInfoDTO info) {
        return rtCfgStatusInfoService.getReferenceSourceContent(info);
    }

    // 在 RtCfgStatusInfoController.java 中修改方法
    /**
     * 获取所有的成品码（分页）
     */
    @GetMapping("/getAllBomCode")
    public ResponseResult getAllBomCode(
            @RequestParam(required = false, defaultValue = "1") Integer pageNumber,
            @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
        return rtCfgStatusInfoService.getAllBomCode(pageNumber, pageSize);
    }

    /**
     * 销售确认流程节点----》新增指定
     * @param list
     * @return
     */
    @PostMapping("/addZd")
    public ResponseResult addZd(@RequestBody List<ZdDbWithFormoid> list) {
        return rtCfgStatusInfoService.addZd(list);
    }


    /**
     * 修改枚举值时  传入枚举值列表 查询相关的需求状态表
     * @param enumItemList
     * @return
     */
    @PostMapping("/getStatusInfoByEnumItemList")
    public ResponseResult getStatusInfoByEnumItemList(@RequestBody List<EnumerationItemHandleVO> enumItemList) {
        return rtCfgStatusInfoService.getStatusInfoByEnumItemList(enumItemList);
    }

    /**
     * 根据成品码编码查询物料编码
     */
    @GetMapping("/getMaterielCodeByProductCode")
    public ResponseResult getMaterielCodeByProductCode(@RequestParam String productCode) {
        return rtCfgStatusInfoService.getMaterielCodeByProductCode(productCode);
    }
}
